package com.starview.star.compiler.canonical;

import com.starview.platform.data.type.IType;

public interface IContentAction extends Canonical
{
  void accept(ActionVisitor visitor);

  /**
   * Allow a transformer to transform this action
   * 
   * @param transform
   * @param context TODO
   * @return the transformed entity. May not be an action, depends on the transform
   */
  <A, E, P, C, D, T> A transform(TransformAction<A, E, P, C, D, T> transform, T context);

  /**
   * Actions have a type associated with them. This is generally of the form
   * 
   * <pre>
   * action of %t
   * </pre>
   * 
   * where %t is a state type associated with the action.
   * 
   * @return an expression denoting the type of the expression.
   */

  IType getType();
}
